Applets
Je pense qu'un tas de gens n'ont pas compris la différence qu'il y a entre Javascript, Java et les applets. Javascript est un langage de scripting utilisé avec HTML tout au long des pages Web. Java est un langage de programmation capable de créer des applications indépendantes. Une applet est un programme Java qui tourne à l'intérieur d'un navigateur Web en conformité avec des standards de programmation donnés. De plus, Javascript a été développé par Netscape et Java par Sun. Si sur les pages Web vous ne voyez que des petits carrés gris alors qu'il devrait y avoir une applet, c'est qu'il vous faut probablement installer la dernière machine virtuelle (VM) Java. Allez simplement sur Sun et téléchargez la : c'est gratuit. Vous pouvez aussi downloader le SDK et tout le reste de manière à pouvoir jouer avec tout ça, développer et écrire vos propres programmes Java et des applets.
Les fichiers class contiennent du bytecode Java compilé accompagné de tout un tas d'autres informations. Heureusement, on obtient facilement un document avec le code source décompilé. Ceci est possible car la correspondance entre le bytecode Java et Java est très serrée (un pour un à la différence de C et de l'assembleur où c'est plus du plusieurs à plusieurs. Il y a beaucoup de décompilateurs et certains sont meilleurs que d'autres. Si votre décompilateur échoue systématiquement, essayez-en tout bêtement un autre. Celui que j'utilise le plus est mDeJava v1.0b (1) et je n'ai jamais vraiment eu de problèmes avec.
La technique basique pour gérer les applets, c'est d'abord de récupérer le fichier class de la manière que vous voulez, puis de le décompiler avec votre décompilo et d'interpréter au mieux ce que vous aurez trouvé. Encore une fois, vous pouvez récupérer des fichiers depuis votre disque dur, ce qui vous donnera sur le champ la totalité des fichiers dont vous avez besoin et vous verrez que ces fichiers additionnels sont downloadés et inclus avec seulement des références discrètes dans les autres fichiers. Pour les niveaux les plus simples, il y aura juste un mot de passe ou une url où vous rendre. Pour les plus compliqués, vous aurez à déchiffrer un vrai programme. Mais on peut aussi faire autre chose que de chercher à comprendre chaque ligne de code. Avec un peu de chance, vous aurez un algorithme aisément réversible. Sinon, vous aurez à écrire une espèce de bruteforceur pour trouver le mot de passe. Le meilleur des challenges en matière d'applets se trouve sur TheGame. Vous aurez besoin d'une très bonne compréhension de Java pour aller jusqu'au bout, mais tout le long, vous vous amuserez bien dans des niveaux faciles avec quelques ruses semblables à celles que l'on rencontre dans les épreuves de Javascript.
Il est possible de bidouiller les fichiers class compilés de telle manière que le décompilateur ait quelques difficultés à travailler. Vous pouvez vous retrouver avec des variables au nom voisin (z,zz,zzz,zz1,zz2,zzx,etc.) ou des constructions curieuses (jmp l104), ce qui doit vous amener à vous méfier. Mais normalement, vous devriez pouvoir recompiler une applet sans trop de problèmes.
Je n'ai pas indiqué de référence à des livres sur Java ou les applets à la fin de cette section car je n'ai jamais réussi à trouver quelque chose de vraiment assez bien. Si vous avez des idées, tenez moi au courant :) J'ai quand même ajouté un lien vers un livre dont le niveau est au dessus ce que la moyenne des amateurs de challenges a besoin de savoir : il traite exclusivement du sujet sous un aspect "reverse engineering".